﻿namespace Digitalmes.Application.Mes.Processes.Boms;

/// <summary>
/// 产品制程制造BOM DTO 对象。
/// </summary>
public sealed class ProcBomDto : Dto
{
    /// <summary>
    /// 产品 Id
    /// </summary>
    public long ProductId { get; set; }

    /// <summary>
    /// 工艺路线Id
    /// </summary>
    public long RouteId { get; set; }

    /// <summary>
    /// 工序 Id
    /// </summary>
    public long OpId { get; set; }

    /// <summary>
    /// 物料 Id。
    /// </summary>
    public long MaterialId { get; set; }

    /// <summary>
    /// 物料代码
    /// </summary>
    [NotNull]
    public string? MaterialCode { get; set; }

    /// <summary>
    /// 是否为主物料。主物料不同于关键物料，不会参与关键物料及其数量的相关信息核对。
    /// </summary>
    /// <remarks>
    /// <para>
    /// 首站上料工序（工艺路线中分支线路），若为主物料，会在上件时对产品进校验。
    /// </para>
    /// <para>
    /// 合流工序，需要指定合流的主物料以做校验。
    /// </para>
    /// </remarks>
    public bool IsMaster { get; set; }

    /// <summary>
    /// 是否在合流时作为主追溯码，仅对主物料有效。
    /// </summary>
    /// <remarks>在合流时，若主物料都没设定，表示是会用一个新码作为主追溯码。</remarks>
    public bool IsTrace { get; set; }

    /// <summary>
    /// 使用量，默认为 1。
    /// </summary>
    public int Qty { get; set; } = 1;

    /// <summary>
    /// 上料顺序。
    /// </summary>
    /// <remarks>
    /// 用在有顺序的扫码上料流程中校验，当数值大于 0 时有效；主物料设为 0。
    /// </remarks>
    public int Seq { get; set; }

    /// <summary>
    /// 是否检测物料来源。
    /// </summary>
    /// <remarks>若检测来源，该物料需来源于其他工序（或另一工单），且有OK过站（或下线）记录。</remarks>
    public bool IsCheckSource { get; set; }

    /// <summary>
    /// 启用状态（0->停用，1->启用）
    /// </summary>
    public EnabledStatusEnum Status { get; set; }
}
